package br.com.dufs.mvc.controller;

import java.util.ArrayList;
import java.util.List;
import javax.faces.event.ActionEvent;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import org.primefaces.context.RequestContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import com.fscoreunipe.app.infra.controller.GenericoMB;
import com.fscoreunipe.app.util.facesUtil.FacesUtil;
import br.com.dufs.mvc.model.Pessoa;
import br.com.dufs.mvc.service.PessoaBOService;

@Controller
public class PessoaMB  implements GenericoMB{

		private Pessoa pessoa;
		private DataModel<Pessoa> listaPessoa;
		private boolean verificaCadastro = false;

		@Autowired
		PessoaBOService pessoaBO;

		@Override
		public DataModel<Pessoa> getListar() {
			List<Pessoa> lista = new ArrayList<Pessoa>();
			lista = pessoaBO.todos();
			listaPessoa = new ListDataModel<Pessoa>(lista);
			return listaPessoa;
		}

		public Pessoa getPessoa() {
			return pessoa;
		}

		public void setPessoa(Pessoa pessoa) {
			this.pessoa = pessoa;
		}

		@Override
		public void prepararAdicionar(ActionEvent actionEvent) {
			this.pessoa = null;
			this.pessoa = new Pessoa();
		}

		@Override
		public void prepararAlterar(ActionEvent actionEvent) {
			this.pessoa = (this.listaPessoa.getRowData());
		}

		@Override
		public void prepararExcluir(ActionEvent actionEvent) {
			this.pessoa = (this.listaPessoa.getRowData());
		}

		@Override
		public String excluir() {
			Pessoa pessoaTemp = pessoa;
			pessoaBO.excluir(pessoaTemp);
			FacesUtil.exibirMensagemSucesso("Excluido com Sucesso!");
			return "pessoa";
		}

		@Override
		public void adicionar(ActionEvent actionEvent) {
			if (pessoaBO.pesquisarPorId(pessoa.getIdPesoa()) != null) {
				this.verificaCadastro = false;
				verifica(actionEvent, "Pessoa ja cadastrada!");
			} else {
				pessoaBO.salvar(pessoa);
				this.verificaCadastro = true;
				verifica(actionEvent, "Pessoa Cadastrada com sucesso!");
			}
		}

		@Override
		public void alterar(ActionEvent actionEvent) {
			pessoaBO.atualizar(this.pessoa);
			this.verificaCadastro = true;
			verifica(actionEvent, "Pessoa Alterado com sucesso!");
		}
		public void verifica(ActionEvent actionEvent, String msg) {
			RequestContext context = RequestContext.getCurrentInstance();
			boolean loggedIn = false;
			if (verificaCadastro) {
				loggedIn = true;
				FacesUtil.exibirMensagemSucesso(msg);
			} else {
				loggedIn = false;
				FacesUtil.exibirMensagemErro(msg);
			}
			context.addCallbackParam("loggedIn", loggedIn);
		}

}